package Zip

import (
	"bytes"
	"compress/flate"
	"io"
)

// Compress 压缩byte数组
func Compress(data []byte) ([]byte, error) {
	var buf bytes.Buffer

	// 创建压缩写入器
	zw, err := flate.NewWriter(&buf, flate.BestCompression)
	if err != nil {
		return nil, err
	}

	// 写入数据
	_, err = zw.Write(data)
	if err != nil {
		return nil, err
	}

	// 关闭写入器以确保所有数据刷新到缓冲区
	err = zw.Close()
	if err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

// Decompress 解压缩byte数组
func Decompress(compressed []byte) ([]byte, error) {
	// 创建压缩读取器
	zr := flate.NewReader(bytes.NewReader(compressed))
	defer zr.Close()

	// 读取解压后的数据
	return io.ReadAll(zr)
}
